package com.jarchie.htgl.base;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import com.gyf.barlibrary.ImmersionBar;
import com.jarchie.htgl.R;
import com.jarchie.htgl.utils.ActivityManager;

/**
 * Created by Jarchie on 2017\12\7.
 * 定义Activity的基类
 */

public abstract class BaseActivity extends AppCompatActivity {
    public Context mContext;
    private ImmersionBar mImmersionBar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        mImmersionBar = ImmersionBar.with(this);
        mImmersionBar.fitsSystemWindows(true)
                .statusBarColor(R.color.colorPrimary)
                .init();
        if (getLayoutId() != 0) {
            setContentView(getLayoutId());
        }
        //将当前Activity添加到管理栈中
        ActivityManager.getInstance().addActivity(this);
        initView();
        setListener();
        initData();
    }

    //返回当前界面布局文件
    protected abstract int getLayoutId();

    //此方法描述的是： 初始化所有view
    protected abstract void initView();

    //此方法描述的是： 设置所有事件监听
    protected abstract void setListener();

    //此方法描述的是： 初始化数据
    protected abstract void initData();

    /**
     * 采用泛型实现的绑定控件的方法,无需再findViewById
     * 直接传入控件的id即可
     */
    @SuppressWarnings("unchecked")
    public <T extends View> T obtainView(int resId) {
        return (T) findViewById(resId);
    }

    @Override
    protected void onDestroy() {
        if (mImmersionBar != null) {
            mImmersionBar.destroy();
        }
        //将当前Activity移除出管理栈
        ActivityManager.getInstance().removeActivity(this);
        super.onDestroy();
    }

}
